const path = require('path');

function resolve(dir = '') {
  return path.join(__dirname, './src', dir);
}

module.exports = {
  publicPath: './',
  outputDir: 'dist',
  assetsDir: 'static',
  productionSourceMap: false,
  devServer: {
    //九键输入法的 「mall」= 「6255」
    port: 6255,
    proxy: {
      '/wx': {
        target: 'http://localhost:8080'
      },
    },
  },
  chainWebpack: config => {
    config.plugins.delete('prefetch');
    config.plugins.delete('preload');
  },
  configureWebpack: {
    resolve: {
      alias: {
        core: resolve('core')
      }
    },
    optimization: {
      /**
       * runtimeChunk可选值有：true或'multiple'或'single'
       * true或'multiple'会有每个入口对应的chunk。不过一般情况下
       * 考虑到要模块初始化，设置为single就够多数情况下使用啦。
       * 详情见官网：https://webpack.docschina.org/configuration/optimization/#optimizationruntimechunk
       * */
      runtimeChunk: {
        name: entrypoint => `runtime~${entrypoint.name}`
      },
      splitChunks: {
        minChunks: 2,
        maxAsyncRequests: 20,
        chunks: 'all', // 可选值：all，async 和 initial。all功能最强大，所以咱们就使用all
        maxInitialRequests: Infinity, // 最大并行请求数，为了以防万一，设置无穷大即可
        minSize: 10000, // 引入的模块大于20kb才做代码分割，官方默认20000，这里不用修改了
        maxSize: 60000, // 若引入的模块大于60kb，则告诉webpack尝试再进行拆分
        cacheGroups: {
          vendors: {
            test: /[\\/]node_modules[\\/]/, // 使用正则匹配node_modules中引入的模块
            priority: -10, // 优先级值越大优先级越高，默认-10，不用修改
            name(module) { // 设定分包以后的文件模块名字，按照包名字替换拼接一下
              const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
              return `npm.${packageName.replace('@', '')}`
            },
          },
        },
      }
    }
  },
  css: {
    loaderOptions: {
      sass: {
        data:
          '@import "@/assets/scss/_var.scss";@import "@/assets/scss/_mixin.scss";'
      }
    }
  }
};
